import getTreePropsDescrible from '../../utils/tree-props-desc';
import getRequestConfigDescrible from '../../utils/request-config-desc';
import fieldTypes from '../../utils/field-types-desc';

const fieldType = fieldTypes.find(({ code }) => code === 'tree') || {};

export default {
    attributes: [
        {
            params: 'v-model',
            des: '绑定值',
            type: fieldType.valueType,
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'formated-value',
            des: '当你配置了 requestConfig 自动请求获取树数据，并且需要设置初始选中某些节点，而恰好你绑定的 v-model 的初始值为节点 nodeKey 组成的数组。那么此时你可能就需要通过配置该字段来展示树选择器框内的初始文本了',
            type: 'String',
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'props',
            des: '表单元素配置; 详细配置请查看下方【props 配置项】',
            type: 'Object',
            values: '-',
            defaultVal: '-',
            details: [
                {
                    title: '配置项【props】',
                    configList: [
                        {
                            params: 'type',
                            des: `表单项控件的类型(此控件的 type 固定为 "${fieldType.code}")`,
                            type: 'String',
                            values: '-',
                            defaultVal: '-',
                        },
                        {
                            params: 'value',
                            des: '表单项控件的默认值，若绑定值为空，将获取该值作为初始值',
                            type: fieldType.valueType,
                            values: '-',
                            defaultVal: '-',
                        },
                        {
                            params: 'size',
                            des: '尺寸大小',
                            type: 'String',
                            values: '"large" | "default" | "small"',
                            defaultVal: '"default"',
                        },
                        {
                            params: 'disabled',
                            des: '是否禁用',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'false',
                        },
                        {
                            params: 'dialogTitle',
                            des: '弹窗标题',
                            type: 'String',
                            values: '-',
                            defaultVal: '-',
                        },
                        {
                            params: 'dialogWidth',
                            des: '弹窗宽度',
                            type: 'String | Number',
                            values: '-',
                            defaultVal: '500px',
                        },
                        {
                            params: 'height',
                            des: '树高度',
                            type: 'Number',
                            values: '-',
                            defaultVal: '-',
                        },
                        {
                            params: 'placeholder',
                            des: '输入框占位提示',
                            type: 'String',
                            values: '-',
                            defaultVal: '"请选择"',
                        },
                        {
                            params: 'clearable',
                            des: '是否展示清空图标',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'true',
                        },
                        {
                            params: 'required',
                            des: '点击确认时是否校验必须至少选择一条数据',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'false',
                        },
                        {
                            params: 'confirmText',
                            des: '弹窗提交按钮文案',
                            type: 'String',
                            values: '-',
                            defaultVal: '"确认"',
                        },
                        {
                            params: 'cancelText',
                            des: '弹窗取消按钮文案',
                            type: 'String',
                            values: '-',
                            defaultVal: '"取消"',
                        },
                        {
                            params: 'showCheckbox',
                            des: '节点是否展示复选框，支持多选',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'false',
                        },
                        {
                            params: 'isLeafOnly',
                            des: '在点击确认时，获取的节点数据是否只含叶子节点；false 表示包含全部已勾选的节点',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'false',
                        },
                        {
                            params: 'includeHalfChecked',
                            des: '在点击确认时，获取的节点数据是否包含半选节点节点(仅 showCheckbox 为 true 有效)',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'false',
                        },
                        {
                            params: 'checkLeafTips',
                            des: '单选情况下（showCheckbox 为 false），且配置了 isLeafOnly 为 true（仅支持选择叶子节点），那么该字段可用于配置校验不通过的提示文案',
                            type: 'String',
                            values: '-',
                            defaultVal: '"仅支持选择叶子节点，请重新选择"',
                        },
                        {
                            params: 'filterable',
                            des: '是否启用筛选；在 filterByFront 不为 false 的情况下，组件内部的筛选均为前台筛选(前台根据节点名称模糊匹配)。 你也可以使用 filterNodeMethod 来自定义前台筛选节点的方法',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'false',
                        },
                        {
                            params: 'filterPlaceholder',
                            des: '筛选框占位文字',
                            type: 'String',
                            values: '-',
                            defaultVal: '\'输入关键字进行过滤\'',
                        },
                        {
                            params: 'filterButtonText',
                            des: '当配置 filterByFront 为 false 时，会展示筛选按钮，该配置可以指定筛选按钮的文案',
                            type: 'String',
                            values: '-',
                            defaultVal: '"查询"',
                        },
                        {
                            params: 'filterByFront',
                            des: '是否为前端根据节点名称模糊匹配进行筛选，设置为 false 时，将禁用前端模糊筛选，并在点击查询按钮时抛出 search 回调方法',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'true',
                        },
                        {
                            params: 'filterNodeMethod',
                            des: '自定义组件内节点筛选规则，返回 true 表示这个节点可以显示，返回 false 则表示这个节点会被隐藏',
                            type: 'Function(value, data, node)',
                            values: '-',
                            defaultVal: '-',
                        },
                        {
                            params: 'requestConfig',
                            des: '通过接口请求树数据的配置；详情请查阅下方说明',
                            type: 'Object',
                            values: '-',
                            defaultVal: '-',
                            details: [
                                {
                                    title: '配置项【requestConfig】',
                                    describes: [
                                        '除以下字段外，requestConfig 还支持传入axios的所有可配置参数，详细配置说明请查阅 https://github.com/axios/axios#request-config',
                                    ],
                                    configList: getRequestConfigDescrible('tree'),
                                },
                            ],
                        },
                        {
                            params: 'options / data',
                            des: '树数据',
                            type: 'Array',
                            values: '-',
                            defaultVal: '-',
                        },
                        {
                            params: 'emptyText',
                            des: '内容为空的时候展示的文案',
                            type: 'String',
                            values: '-',
                            defaultVal: '"暂无数据"',
                        },
                        {
                            params: 'optionProps',
                            des: '配置选项，具体看下表',
                            type: 'Object',
                            values: '-',
                            defaultVal: '-',
                            details: [
                                {
                                    title: '配置项【optionProps】',
                                    describes: ['用于指定树节点相关功能性字段对应的字段编码'],
                                    configList: getTreePropsDescrible('picker'),
                                },
                            ],
                        },
                        {
                            params: 'renderAfterExpand',
                            des: '是否在第一次展开某个树节点后才渲染其子节点',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'true',
                        },
                        {
                            params: 'highlightCurrent',
                            des: '是否高亮当前选中节点',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'true',
                        },
                        {
                            params: 'defaultExpandAll',
                            des: '是否默认展开所有节点',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'true',
                        },
                        {
                            params: 'checkOnClickNode',
                            des: '若节点可勾选，是否在点击节点的时候选中节点，默认值为 false，即只有在点击复选框时才会选中节点。',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'false',
                        },
                        {
                            params: 'defaultExpandedKeys',
                            des: '默认展开的节点；属性值为节点对应的 node-key 组成的数组',
                            type: 'Array',
                            values: '-',
                            defaultVal: '-',
                        },
                        {
                            params: 'checkStrictly',
                            des: '在显示复选框的情况下，是否严格的遵循父子不互相关联的做法',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'false',
                        },
                        {
                            params: 'accordion',
                            des: '是否每次只打开一个同级树节点展开（手风琴模式）',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'false',
                        },
                        {
                            params: 'indent',
                            des: '树节点缩进',
                            type: 'Number',
                            values: '-',
                            defaultVal: '18',
                        },
                        {
                            params: 'icon',
                            des: '自定义树节点的图标',
                            type: 'String | Component',
                            values: '-',
                            defaultVal: '-',
                        },
                        {
                            params: 'unit',
                            des: '控件尾部的单位文案配置',
                            type: 'String',
                            values: '-',
                            defaultVal: '-',
                        },
                    ],
                },
            ],
        },
    ],
    events: [
        {
            name: 'change',
            des: '绑定值修改后触发的事件',
            params: '({ value, label, data }, props)',
        },
        {
            name: 'clear',
            des: '点击清空图标，清空输入框的值后抛出的事件',
            params: '(value, props)',
        },
        {
            name: 'search',
            des: '点击筛选模块的 \'筛选\' 按钮时抛出的方法（需启用筛选，并且配置 filterByFront 为 false）',
            params: '(value, props, keyword)',
        },
    ],
    slots: [
        {
            name: 'prepend',
            des: '输入框前置内容',
            params: '-',
        },
        {
            name: 'append',
            des: '输入框后置内容',
            params: '-',
        },
    ],
    refs: [],
};
